<?php

class Doctrine {

    // the Doctrine entity manager
    public $em = null;

    public function __construct() {
        // include our CodeIgniter application's database configuration
        require_once APPPATH . 'config/database.php';       
        

        // include Doctrine's fancy ClassLoader class
        require_once APPPATH . 'libraries/Doctrine/Common/ClassLoader.php';

        // load the Doctrine classes
        $doctrineClassLoader = new \Doctrine\Common\ClassLoader('Doctrine', APPPATH . 'libraries');
        $doctrineClassLoader->register();

        // load Symfony2 helpers
        // Don't be alarmed, this is necessary for YAML mapping files
        $symfonyClassLoader = new \Doctrine\Common\ClassLoader('Symfony', APPPATH . 'libraries/Doctrine');
        $symfonyClassLoader->register();

        // load the entities
        $entityClassLoader = new \Doctrine\Common\ClassLoader('Entities', rtrim(APPPATH . 'models'));
        $entityClassLoader->register();
        
        // load the proxy entities
        $proxyClassLoader = new \Doctrine\Common\ClassLoader('Proxies', rtrim(APPPATH . 'models'));
        $proxyClassLoader->register();

        // set up the configuration
        $config = new \Doctrine\ORM\Configuration;
//        var_dump (ENVIRONMENT);

        if (ENVIRONMENT == 'development')
        // set up simple array caching for development mode
            $cache = new \Doctrine\Common\Cache\ArrayCache;
        else
        // set up caching with APC for production mode
            $cache = new \Doctrine\Common\Cache\ApcCache;
        
        $config->setMetadataCacheImpl($cache);
        $config->setQueryCacheImpl($cache);

            
        // set up proxy configuration
        $config->setProxyDir(APPPATH . 'models/Proxies');
        $config->setProxyNamespace('Proxies');

        // auto-generate proxy classes if we are in development mode
        $config->setAutoGenerateProxyClasses(ENVIRONMENT == 'development');

        // set up annotation driver
        $yamlDriver = new \Doctrine\ORM\Mapping\Driver\YamlDriver(APPPATH . 'models/Mappings');
        $config->setMetadataDriverImpl($yamlDriver);

        // Database connection information
        $connectionOptions = array(
            'driver' => $db[$active_group]['dbdriver_doctrine'],
            'user' => $db[$active_group]['username'],
            'password' => $db[$active_group]['password'],
            'host' => $db[$active_group]['hostname'],
            'dbname' => $db[$active_group]['database']
        );

        // create the EntityManager
        $em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config);

        // store it as a member, for use in our CodeIgniter controllers.
        $this->em = $em;
    }

}